From: Keir Fraser Date: Fri, 29 May 2009 08:32:40 +0000 (+0100) Subject: xend: Fix check for request to detach non-existent device X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~13846 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=9995f10739d25253a79c9c4aa9481ed5cba91300;p=xen.git xend: Fix check for request to detach non-existent device This fixes the check for a request to detatch a non-existent device in pci_device_configure. The previous check was bogus because the format of AUTO_PHP_SLOT_STR is not the same as that of x['vslot']. However, it works in a slightly non-obvious way, checking that vslot hasn't been altered from its initial value AUTO_PHP_SLOT_STR. To make this shceme a little clearer, use an empty string as the inital value. Formting issues asside, neither AUTO_PHP_SLOT_STR nor the empty string are valid values for x['vslot']. In the event of invalid data (indicating a bug), it should be caught by self.hvm_destroyPCIDevice. Signed-off-by: Simon Horman --- diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 6922191350..2c75c91fcf 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -854,7 +854,7 @@ class XendDomainInfo: existing_dev_uuid = sxp.child_value(existing_dev_info, 'uuid') existing_pci_conf = self.info['devices'][existing_dev_uuid][1] existing_pci_devs = existing_pci_conf['devs'] - vslot = AUTO_PHP_SLOT_STR + vslot = "" for x in existing_pci_devs: if ( int(x['domain'], 16) == int(dev['domain'], 16) and int(x['bus'], 16) == int(dev['bus'], 16) and @@ -862,7 +862,7 @@ class XendDomainInfo: int(x['func'], 16) == int(dev['func'], 16) ): vslot = assigned_or_requested_vslot(x) break - if vslot == AUTO_PHP_SLOT_STR: + if vslot == "": raise VmError("Device %04x:%02x:%02x.%01x is not connected" % (int(dev['domain'],16), int(dev['bus'],16), int(dev['slot'],16), int(dev['func'],16)))